home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BCI NET
/
BCI NET Dec 94.iso
/
archives
/
programming
/
c
/
metre.lha
/
metre.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-07
|
8KB
|
197 lines
/*************************************************************
Copyright (c) 1993,1994 by Paul Long All rights reserved.
**************************************************************/
/*************************************************************
metre.h - This header file contains #defines,
typedefs, and externs that are used
by the rules code to interface with
the parser.
**************************************************************/
#ifndef _METRE_H_
#define _METRE_H_
#include <stdio.h>
/* Define TRUE and FALSE if environment doesn't. */
#ifndef TRUE
#define TRUE (0==0)
#define FALSE (!TRUE)
#endif
typedef int BOOLEAN;
/*
Project information. A project consists of one or more modules
(source files).
*/
typedef struct {
BOOLEAN begin; /* Set to whether beginning of the project. */
BOOLEAN end; /* Set to whether end of the project. */
} PRJ;
/*
Module information. In Metre, a module is currently the same thing as
a source file.
*/
typedef struct {
BOOLEAN begin; /* Set to whether beginning of a source module
has been encountered. */
BOOLEAN end; /* Set to whether end of a source module (a file
and all of its included files) has been
reached. */
struct {
unsigned total; /* Set to the total number of lines in a module. */
unsigned com; /* Set to the number of comment lines in a module. */
unsigned white; /* Set to the number of whitespace lines in a
module. */
unsigned exec; /* Set to the number of executable lines in a
module. */
} lines;
unsigned decisions; /* Set to the number of binary decision points in a
module. */
unsigned functions; /* Set to the number of functions defined in a
module. */
} MOD;
/* Function information. */
typedef struct {
BOOLEAN begin; /* Set to whether beginning of a function has
been found. */
BOOLEAN end; /* Set to whether end of a function has been
found. */
struct {
unsigned total; /* Set to the total number of lines in a function. */
unsigned com; /* Set to the number of comment lines in a
function. */
unsigned white; /* Set to the number of whitespace lines in a
function. */
unsigned exec; /* Set to the number of executable lines in a
function. */
} lines;
unsigned high; /* Set to the number of high-level statements found
in the definition of a C function. */
unsigned low; /* Set to the number of low-level statements found
in the definition of a C function. */
unsigned decisions; /* Set to the number of binary decision points in a
function. */
} FCN;
/* Statement information. */
typedef struct {
BOOLEAN end; /* Set to whether end of a statement has been
found. */
unsigned depth; /* Set to the logical depth of a statement, i.e.,
its nesting level within if-, for-, while-, and
do-statements. */
BOOLEAN is_comp; /* Set to whether is a compound statement. */
BOOLEAN is_expr; /* Set to whether is an expression statement. */
BOOLEAN is_high; /* Set to whether is a compound, selection, or
iteration statement. */
BOOLEAN is_iter; /* Set to whether is an iteration statement. */
BOOLEAN is_jump; /* Set to whether is a jump statement. */
BOOLEAN is_label; /* Set to whether is a labeled statement. */
BOOLEAN is_low; /* Set to whether is an expression or jump
statement. */
BOOLEAN is_select; /* Set to whether is a selection statement. */
} STM;
/* Line information. */
typedef struct {
unsigned number; /* Set to the number of the current line, relative
to the start of the current file. */
BOOLEAN end; /* Set to whether a newline character has been
found. */
BOOLEAN is_comment; /* Set to whether line has no C code and either
contains a comment or is contained within a
comment. The comment must contain text to qualify
as a real comment. */
BOOLEAN is_white; /* Set to whether line consists entirely of whitespace
tabs & spaces), or is a comment line without any
text. */
BOOLEAN is_exec; /* Set to whether line contains code that is
executable. */
unsigned statements; /* Set to the number of statements on the current
line. */
BOOLEAN is_mixed_indent; /* Set to whether line is indented with both space
and tab characters. */
} LIN;
/* Lexical information. */
typedef struct {
int nonstandard; /* Whenever a character is found that is not in the
standard C set, the value of this variable is set
to the integer representation of the nonstandard
character. */
} LEX;
/*
Extern declarations for the structs through which the parser provides
information to the rules.
*/
extern PRJ prj;
extern MOD mod;
extern FCN fcn;
extern STM stm;
extern LIN lin;
extern LEX lex;
/* FILE pointer to where any output should be directed by the rules. */
extern FILE *out_fp;
/* Returns pointer to current function name. */
extern char *fcn_name(void);
/* Returns pointer to current module (file) name. */
extern char *mod_name(void);
/* Returns pointer to current source line. */
extern char *line(void);
/*
Returns pointer to string that "points" to the parser's current location in
source. E.g.,
-
Useful in error messages. The parser uses this function for syntax errors,
but it could also be used by a rule.
*/
extern char *marker(void);
/* Returns pointer to current token (lexeme, actually) in the source. */
extern char *token(void);
/*
Returns TRUE when the indicated keyword or identifier, e.g., "while"
or "myBuffer", respectively, is encountered. Can be used as a
trigger in a rule.
*/
extern BOOLEAN keyword(char *);
extern BOOLEAN identifier(char *);
/*
Returns pointer to the part of an option following the "=". E.g.,
for -Xabc=def, it would point to the "def" part.
*/
extern char *str_option(char);
/*
Returns TRUE if the indicated option character was specified on the
command line. E.g., for -S, would return TRUE for option('S').
*/
extern int option(char);
/*
Used by rules to indicate a fatal error or warning. Expects a
fatal-error or warning number that the programmer can make up,
followed by a format string and other arguments, just like printf(). E.g.,
warn(0, "goto statement used (%u time%s)", fcn_gotos, NUMBER(fcn_gotos));
*/
extern void fatal(int, char *, ...);
extern void warn(int, char *, ...);
#endif